package com.njts.cricule.src.com.njts.recycle;

import java.util.Scanner;

/**
 * @author David GE
 * Date  2025/11/12
 * 一对兔子，从出生后第3个月起每个月都生一对兔子。小免子长到第3个月后每个月又生一对兔子。假如兔子都不死，请问第1个月出生的一对免子，至少需要繁衍到第几个月时免子总数才可以达到N对？
 * 输入格式：
 * 输入在一行中给出不超过10000的正整数N。
 * 输出格式：
 * 在一行中输出免子总数达到N最少需要的月数。
 * 输入样例：
 * 30
 *
 * 输出样例：
 * 9
 * 用while循环实现
 *
 * for 1有显式的定义循环变量,更适合确定循环次数的循环操作
 * 2:for循环会自动在定义时对循环变量进行更新
 * 3 for循环不需要在循环体内部手动计算循环次数
 *
 * while 循环
 * 1 没有显式的定义循环变量
 * 2 只根据循环条件确定循环是否执行
 * 3 需要手动定义循环变量(如果必须)并更新
 *
 * do while
 * 无论循环条件是否满足,都会至少执行一次循环体
 */
public class RabbitProblemWhile {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
       // 1 2 3 4 5  6 ...... // 斐波拉契问题 迭代思想
        // 1 1 2 3 5 8
        // b res res
        //    a  b  res
        int a =1;
        int b =1;
        int res =0;
        int i=3;
        while (res<n){
            if (n==1){
                System.out.println(1);
                break;
            }
            res =a+b;// 每一个月的兔子数等于前两个月的和
            if (res>=n){//循环终止条件
                System.out.println(i);
            }
            // 变量迭代,首尾相接,覆盖
            a=b;
            b=res;
            i++;// 在循环体内部对循环变量更新
        }


    }
}
